#include <iostream>

using namespace std;

/*
    友元：C++提供一种语法机制，可以让程序员通过对象调用类的私有成员
    分成两大类：
    友元函数
    友元类
    1.请你封装一个普通函数，该函数可以访问/修改任何一个人的支付宝信息
    问题： 类对象无法在类的外面访问/修改私有成员变量
    解决： 将该函数声明为类的友元函数

    语法：
    friend 函数返回值类型 函数名(参数列表)
    {

    }
    例如： friend void showAliPayInfo(AliPay *aliPay);
*/

class AliPay
{
public:
    AliPay(string account, string passwd, double money)
    {
        this->account = account;
        this->passwd = passwd;
        this->money = money;
    }

    friend void showAliPayInfo(AliPay &aliPay);
    friend void updateAliPayInfo(AliPay &aliPay, string passwd, double money);

private:
    string account;
    string passwd;
    double money;
};

void showAliPayInfo(AliPay &aliPay)
{
    cout << "account: " << aliPay.account << endl;
    cout << "passwd: " << aliPay.passwd << endl;
    cout << "money: " << aliPay.money << endl;
}

void updateAliPayInfo(AliPay &aliPay, string passwd, double money)
{
    aliPay.passwd = passwd;
    aliPay.money = money;
}

int main()
{
    AliPay aliPay("zhangsan", "123456", 1000);
    showAliPayInfo(aliPay);

    updateAliPayInfo(aliPay, "654321", 2000);

    showAliPayInfo(aliPay);
    return 0;
}